home *** CD-ROM | disk | FTP | other *** search
/ PC-Blue - MS DOS Public Domain Library / PC-Blue MS-DOS Public Domain Library - NYACC.iso / vol136 / pambooks.bas < prev    next >
Encoding:
BASIC Source File  |  1986-12-15  |  16.8 KB  |  283 lines

  1. 10 REM  ****************************************************************************************************************
  2. 20 REM                'PAMBOOKS' - A SIMPLE BOOKKEEPING SYSTEM TO USE WITH 'PAMCHECK' PROGRAM
  3. 30 REM  ****************************************************************************************************************
  4. 40 '
  5. 50 '    PAM - PERSONAL ACCOUNTS MANAGER  Version 1.0
  6. 60 '    COPYRIGHT 1983
  7. 70 '    S. E. BUTTON
  8. 80 '
  9. 90 '                                                     WARNING
  10. 100 ' This software (and manual) are both protected by U. S. Copyright Law (Title 17 United States Code).
  11. 110 ' Unauthorized reproduction and/or sales may result in imprisonment of up to 1 year and fines of up to $10,000 (17 USC 506).
  12. 120 ' Copyright infringers may be subject to civil liability.
  13. 130 '
  14. 140 '
  15. 150 SCREEN 0,0,0: DEF SEG = &H40: IF (PEEK(&H10) AND &H30) = &H30 THEN WIDTH 80: IN$ = SPACE$(20) ELSE WIDTH 40: IN$ = ""
  16. 160 DEF SEG: POKE 106,0: DEFINT I-K: KEY OFF: FOR I = 1 TO 10: KEY I,"": NEXT I  'SET FUNCTION KEYS TO NULL
  17. 170 WIDTH "LPT1:",132: ON ERROR GOTO 1750
  18. 180 PRINT: PRINT IN$;"  Does your printer require condensed"
  19. 190 PRINT IN$;"  character printing mode to print 132"
  20. 200 PRINT IN$;"  characters per line?  Reply Y or N"
  21. 210 C$ = INKEY$: IF C$ = "" THEN 210
  22. 220 IF C$ = "N" OR C$ = "n" THEN PMODE$ = CHR$(18): GOTO 260
  23. 230 IF C$ = "Y" OR C$ = "y" THEN PMODE$ = CHR$(15): GOTO 250
  24. 240 PRINT IN$;"  I need a Y or N.  Retry": GOTO 210
  25. 250 LPRINT CHR$(15);   'TURN ON CONDENSED CHARACTER PRINT MODE
  26. 260 GOTO 420           '1ST LINE OF PROGRAM
  27. 270 REM -----------------------------------INDEX OF SUBROUTINE ENTRY POINTS ---------------------------------------------
  28. 280 GOTO 650           'DISPLAY BOOKKEEPING SYSTEM JOBS MENU
  29. 290 GOSUB 1370: RETURN  'OPEN ACCOUNTS.REC FILE
  30. 300 GOSUB 1460: RETURN 'OPEN AUDTRAIL.REC FILE
  31. 310 GOSUB 1520: RETURN 'GET REQUESTED ACCOUNTS FILE RECORD
  32. 320 GOSUB 1570: RETURN 'PUT REQUESTED ACCOUNTS FILE RECORD
  33. 330 GOSUB 1620: RETURN 'UPDATE ACCOUNTS FILE CONTROL RECORD
  34. 340 GOSUB 1700: RETURN 'READ RECORD FROM AUDTRAIL.REC FILE
  35. 350 GOSUB 1860: RETURN 'PRINT ACCOUNTS FILE RECORD
  36. 360 GOSUB 2170: RETURN 'PRINT ACCOUNTS REPORT HEADING
  37. 370 GOSUB 2310: RETURN 'DATA ENTRY VALIDATION ROUTINE
  38. 380 GOTO 2700          'PROGRAM END
  39. 390 REM *****************************************************************************************************************
  40. 400 REM           VARIABLES WHICH MAY BE CHANGED TO MEET USER REQUIREMENTS - SEE APPENDIX D OF USER'S MANUAL
  41. 410 REM  ****************************************************************************************************************
  42. 420 M10% = 384   'NUMBER OF PRIME AREA RECORDS IN ACCOUNTS FILE
  43. 430 M11% = 32   'NUMBER OF OVERFLOW AREA RECORDS IN ACCOUNTS FILE
  44. 440 DIM STOCK$(M11%), QUOTE#(M11%)   'STOCK MARKET CORP. CODE AND MARKET QUOTATION ARRAYS
  45. 450 '
  46. 460 '
  47. 470 REM ----------------------------------------------------------------------------------------------------------------
  48. 480 REM                                          LITERALS AND CONSTANTS
  49. 490 REM  ---------------------------------------------------------------------------------------------------------------
  50. 500 NOTNUM$ = "  Not a valid numeric entry, retry."
  51. 510 TITLE$ = SPACE$(15)
  52. 520 ACTION$ = SPACE$(18)
  53. 530 ENTER$ = CHR$(13)      'ENTER KEY
  54. 540 BKSPC$ = CHR$(8)       'BACKSPACE KEY
  55. 550 ESC$ = CHR$(27)        'ESCAPE KEY
  56. 560 Y = 1: X = 1           'CURSOR SAVE FIELDS FOR LINE & ROW
  57. 570 TRUE% = -1: FALSE% = 0 'TRUE/FALSE VALUES
  58. 580 FIELDMAX% = 0          'MAXIMUM DATA ENTRY FIELD LENGTH
  59. 590 DATA.CNT% = 0          'DATA ENTRY CHARACTER COUNT
  60. 600 DATU$ = ""             'DATA ENTRY FIELD
  61. 610 CK$ = ""               'DATA ENTRY INKEY$ CHARACTER FIELD
  62. 620 REM  ***************************************************************************************************************
  63. 630 REM                                 DISPLAY THE BOOKKEEPING SYSTEM JOB MENU
  64. 640 REM  ***************************************************************************************************************
  65. 650 CLS
  66. 660 PRINT: PRINT IN$;"     BOOKKEEPING JOB CHOICES MENU": PRINT
  67. 670 PRINT IN$;"  F1  Accounts File, Create & Maintain"
  68. 680 PRINT IN$;"  F2  Journal Entry, Post to Accounts"
  69. 690 PRINT IN$;"  F3  Depreciation of Assets"
  70. 700 PRINT IN$;"  F4  Net Worth Statement"
  71. 710 PRINT IN$;"  F5  Accounts File Close, Period-End"
  72. 720 PRINT IN$;"        Income and Expenses Statement"
  73. 730 PRINT IN$;"  F6  Trial Balance Report"
  74. 740 PRINT IN$;"  F7  Accounts File - Print Contents"
  75. 750 PRINT IN$;"  F8  Job is completed.  Stop this run"
  76. 760 PRINT IN$;"  F9  Transfer to PAMCHECK Job Choices"
  77. 770 PRINT: BEEP: PRINT IN$;: COLOR 0,7: PRINT "  Press Function Key for Job Choice. ";: Y = CSRLIN: X = POS(0)
  78. 780 CK$ = INKEY$: IF CK$ = "" THEN 780
  79. 790 CK = ASC(CK$): IF CK = 0 THEN GOTO 810
  80. 800 BEEP: BEEP: GOTO 770   'NOT A FUNCTION KEY WHEN CK<>0
  81. 810 FKEY = ASC(RIGHT$(CK$,1))   'TEST 2ND BYTE FOR WHICH FUNCTION KEY PRESSED
  82. 820 IF FKEY > 58 AND FKEY < 69 THEN CHOICE = FKEY - 58: GOTO 840
  83. 830 GOTO 770
  84. 840 PRINT CHOICE: COLOR 7,0
  85. 850 IF (CHOICE>0) AND (CHOICE<10) THEN GOTO 880
  86. 860     BEEP: BEEP: COLOR 31,0: PRINT IN$;"  Choices are 1 thru 9, try again";
  87. 870     GOTO 780
  88. 880 ON CHOICE GOTO 930,970,1010,1050,1130,1090,1170,2700,1240
  89. 890 GOTO 650
  90. 900 REM  ***************************************************************************************************************
  91. 910 REM                                      CHAIN MERGE PROGRAM OVERLAYS
  92. 920 REM  ***************************************************************************************************************
  93. 930 CLS
  94. 940 LOCATE 12,3
  95. 950 PRINT IN$;"Loading Program BOOKMAIN Into Memory"
  96. 960 CHAIN MERGE "B:BOOKMAIN.BAS",4000,ALL,DELETE 4000-9000
  97. 970 CLS
  98. 980 LOCATE 12,3
  99. 990 PRINT IN$;"Loading Program BOOKPOST Into Memory"
  100. 1000 CHAIN MERGE "B:BOOKPOST.BAS",4000,ALL,DELETE 4000-9000
  101. 1010 CLS
  102. 1020 LOCATE 12,3
  103. 1030 PRINT IN$;"Loading Program BOOKDEPR Into Memory"
  104. 1040 CHAIN MERGE "B:BOOKDEPR.BAS",4000,ALL,DELETE 4000-9000
  105. 1050 CLS
  106. 1060 LOCATE 12,3
  107. 1070 PRINT IN$;"Loading Program BOOKWRTH Into Memory"
  108. 1080 CHAIN MERGE "B:BOOKWRTH.BAS",4000,ALL,DELETE 4000-9000
  109. 1090 CLS
  110. 1100 LOCATE 12,3
  111. 1110 PRINT IN$;"Loading Program BOOKTBAL Into Memory"
  112. 1120 CHAIN MERGE "B:BOOKTBAL.BAS",4000,ALL,DELETE 4000-9000
  113. 1130 CLS
  114. 1140 LOCATE 12,3
  115. 1150 PRINT IN$;"Loading Program BOOKCLSE Into Memory"
  116. 1160 CHAIN MERGE "B:BOOKCLSE.BAS",4000,ALL,DELETE 4000-9000
  117. 1170 CLS
  118. 1180 LOCATE 12,3
  119. 1190 PRINT IN$;"Loading Program BOOKPRNT Into Memory"
  120. 1200 CHAIN MERGE "B:BOOKPRNT.BAS",4000,ALL,DELETE 4000-9000
  121. 1210 REM  ***************************************************************************************************************
  122. 1220 REM                        LOAD 'PAMCHECK' PROGRAM AND CHOOSE FROM 'JOB CHOICES MENU'
  123. 1230 REM  ***************************************************************************************************************
  124. 1240 CLOSE  'CLOSE BOOKKEEPING FILES
  125. 1250 CLS
  126. 1260 LOCATE 12,1
  127. 1270 PRINT IN$;: COLOR 0,7: PRINT "  Insert PAMCHECK Diskette in Drive A": COLOR 7,0
  128. 1280 PRINT IN$;: COLOR 0,7: PRINT "  Press any key to continue          ": COLOR 7,0
  129. 1290 IF INKEY$ = "" THEN GOTO 1290
  130. 1300 PRINT: PRINT IN$;"  Loading Program PAMCHECK Into Memory"
  131. 1310 LOAD"A:PAMCHECK",R
  132. 1320 REM  ***************************************************************************************************************
  133. 1330 REM                                              SUBROUTINES
  134. 1340 REM  ***************************************************************************************************************
  135. 1350 REM                            SUBROUTINE TO OPEN BOOKKEEPING SYSTEM ACCOUNTS FILE
  136. 1360 REM  ***************************************************************************************************************
  137. 1370 CLOSE   'BE SURE FILES ARE NOT OPEN FROM PREVIOUS PROCESSING
  138. 1380 OPEN "B:ACCOUNTS.REC" AS #1 LEN=128
  139. 1390 ON ERROR GOTO 1750
  140. 1400 REM  ---------------------------------------------------------------------------------------------------------------
  141. 1410 REM                     BOOKKEEPING SYSTEM 'ACCOUNTS' FILE #1 FIELDS IN THE I/O BUFFER
  142. 1420 REM  ---------------------------------------------------------------------------------------------------------------
  143. 1430 FIELD #1,2 AS B1$,2 AS B2$,1 AS F4$,4 AS B3$,2 AS B4$,30 AS B5$,30 AS B6$,4 AS B7$,8 AS B8$,8 AS B9$,2 AS B10$,1 AS B11$,8 AS B12$,8 AS B13$,8 AS B14$,8 AS B15$,2 AS B16$
  144. 1440 RETURN
  145. 1450 REM  ***************************************************************************************************************
  146. 1460 OPEN "B:AUDTRAIL.REC" FOR INPUT AS #3
  147. 1470 ON ERROR GOTO 1750
  148. 1480 RETURN
  149. 1490 REM  ***************************************************************************************************************
  150. 1500 REM                        SUBROUTINE TO GET THE REQUESTED 'ACCOUNTS' FILE #1 RECORD
  151. 1510 REM  **************************************************************************************************************
  152. 1520 GET #1,REC%
  153. 1530 RETURN
  154. 1540 REM  **************************************************************************************************************
  155. 1550 REM                        SUBROUTINE TO PUT THE REQUESTED 'ACCOUNTS' FILE #1 RECORD
  156. 1560 REM  **************************************************************************************************************
  157. 1570 PUT #1,REC%
  158. 1580 RETURN
  159. 1590 REM  **************************************************************************************************************
  160. 1600 REM               SUBROUTINE TO UPDATE THE ACCOUNTS FILE CONTROL RECORD - FIRST RECORD IN FILE
  161. 1610 REM  **************************************************************************************************************
  162. 1620 GET #1,1
  163. 1630 LSET B5$ = "LAST UPDATED ON " + DATE$
  164. 1640 LSET B6$ = "TIME OF UPDATE " + TIME$
  165. 1650 PUT #1,1
  166. 1660 RETURN
  167. 1670 REM  **************************************************************************************************************
  168. 1680 REM                           SUBROUTINE TO READ RECORD FROM 'AUDTRAIL' FILE #3
  169. 1690 REM  **************************************************************************************************************
  170. 1700 INPUT #3,DA$,TI$,TC$,CN%,AC$,TD$,PA%,PC$,PA$,TAMT,LACTM%,LACTS%,LAMT,BDIW,BAMT
  171. 1710 RETURN
  172. 1720 REM  **************************************************************************************************************
  173. 1730 REM                                        ERROR HANDLING SUBROUTINE
  174. 1740 REM  **************************************************************************************************************
  175. 1750 IF ERR=27 THEN COLOR 31,0: PRINT IN$;"  Printer is not ON": PRINT IN$;"  or is out of paper":  BEEP: BEEP: COLOR 7,0: RESUME
  176. 1760 IF ERR=24 THEN COLOR 31,0: PRINT IN$;"  Printer not READY!!!": BEEP: BEEP: COLOR 7,0: RESUME
  177. 1770 IF ERR=25 THEN COLOR 31,0: PRINT IN$;"  Check PRINTER and DISK are READY!!!": BEEP: BEEP: COLOR 7,0: RESUME
  178. 1780 ERM1$ = "  Field allocation is"
  179. 1790 ERM2$ = "  greater than record length."
  180. 1800 ERM3$ = "  Correct program, then restart"
  181. 1810 IF ERR=50 AND ERL=1430 THEN COLOR 31,0: PRINT IN$;"  FILE #4";ERM1$: PRINT IN$;ERM2$: PRINT IN$;ERM3$: COLOR 7,0: END
  182. 1820 ON ERROR GOTO 0
  183. 1830 REM  **************************************************************************************************************
  184. 1840 REM                              SUBROUTINE TO PRINT AN ACCOUNTS FILE RECORD
  185. 1850 REM  **************************************************************************************************************
  186. 1860 IF LINECT% > 58 THEN GOSUB 2170  'PRINT REPORT HEADING LINES
  187. 1870 LACTM% = CVI(B1$)
  188. 1880 LACTS% = CVI(B2$)
  189. 1890 LPRINT USING "####";LACTM%;LACTS%;
  190. 1900 LPRINT " ";B3$;
  191. 1910 KINT% = CVI(B4$)
  192. 1920 IF KINT%<>0 THEN LPRINT USING "####";KINT%; ELSE LPRINT SPC(4);
  193. 1930 LPRINT " ";B5$;
  194. 1940 KSP! = CVS(B7$)
  195. 1950 IF ABS(KSP!) > .0001 THEN LPRINT USING " ####.### ";KSP!; ELSE LPRINT SPC(10);
  196. 1960 LPRINT B8$;
  197. 1970 KDP# = CVD(B9$)
  198. 1980 IF ABS(KDP#) > .001 THEN LPRINT USING "######,.##  ";KDP#; ELSE LPRINT SPC(12);
  199. 1990 KINT% = CVI(B10$)
  200. 2000 IF KINT%<>0 THEN LPRINT USING "###  ";KINT%; ELSE LPRINT SPC(5);
  201. 2010 LPRINT B11$;
  202. 2020 KDP# = CVD(B12$)
  203. 2030 IF ABS(KDP#) > .001 THEN LPRINT USING " ######,.##-";KDP#; ELSE LPRINT SPC(12);
  204. 2040 KDP# = CVD(B13$)
  205. 2050 IF ABS(KDP#) > .001 THEN LPRINT USING " ######,.##-";KDP#; ELSE LPRINT SPC(12);
  206. 2060 KDP# = CVD(B14$)
  207. 2070 IF ABS(KDP#) > .001 THEN LPRINT USING " ######,.##-";KDP#; ELSE LPRINT SPC(12);
  208. 2080 KDP# = CVD(B15$)
  209. 2090 IF ABS(KDP#) > .001 THEN LPRINT USING "######,.##-";KDP# ELSE LPRINT SPC(11)
  210. 2100 LPRINT ACTION$;B6$
  211. 2110 LPRINT
  212. 2120 LINECT% = LINECT% + 3
  213. 2130 RETURN
  214. 2140 REM  **************************************************************************************************************
  215. 2150 REM                              SUBROUTINE TO PRINT ACCOUNTS REPORT HEADING
  216. 2160 REM  **************************************************************************************************************
  217. 2170 IF PAGENO% <> 0 THEN LPRINT CHR$(12)
  218. 2180 PAGENO% = PAGENO% + 1
  219. 2190 LPRINT PMODE$;DATE$; TAB(31);"BOOKKEEPING  SYSTEM  -  ACCOUNTS FILE  -  AUDIT LISTING ";TITLE$;TAB(122);"PAGE";
  220. 2200 LPRINT USING " ####";PAGENO%
  221. 2210 LPRINT: LPRINT TAB(59);"ASSET-ACQUIRED OR    ASSET    ASSET";TAB(118);"INCOME/EXPENSE"
  222. 2220 LPRINT "ACCT REC  PAYEE";TAB(59);"LIABILITY-INCURRED MOS. DPR CUMULATIVE";TAB(121);"BUDGET OR"
  223. 2230 LPRINT "  #   #  NO.  REC    D E S C R I P T I O N         UNITS   DATE      AMOUNT  LIFE CDE DEPREC'TN     DEBIT      CREDIT ASSET SALVAGE"
  224. 2240 LPRINT
  225. 2250 LINECT% = 6
  226. 2260 RETURN
  227. 2270 REM  **************************************************************************************************************
  228. 2280 REM                                    SUBROUTINE TO VALIDATE DATA ENTRY
  229. 2290 REM  **************************************************************************************************************
  230. 2300 SOUND 50,4         'TONE TO SIGNAL REENTER DATA
  231. 2310 LOCATE Y,X: COLOR 0,7
  232. 2320 DEF SEG = &H40
  233. 2330 POKE &H17,(PEEK(&H17) OR &H60)   'TURN NUM LOCK AND CAPS LOCK ON
  234. 2340 DEF SEG
  235. 2350 POKE 106,0
  236. 2360 PRINT "[";STRING$(FIELDMAX%,"-");"]";
  237. 2370 DATU$ = ""         'SET DATA ENTRY FIELD TO NULL
  238. 2380 DATA.CNT% = 0      'SET DATA ENTRY COUNT FIELD TO ZERO
  239. 2390 LOCATE Y,X+1       'SET CURSOR TO FIRST PRINT POSITION
  240. 2400 IF INKEY$ <> "" THEN GOTO 2400  'CLEAR KEYSTROKE BUFFER
  241. 2410 CK$ = INKEY$: IF CK$ = "" THEN GOTO 2410
  242. 2420 IF CK$ = ENTER$ THEN GOTO 2550
  243. 2430 IF CK$ = BKSPC$ THEN GOSUB 2600: GOTO 2400  'ERASE LAST CHARACTER ENTERED
  244. 2440 IF CK$ = ESC$ THEN GOTO 2300    'REENTER ALL DATA
  245. 2450 CK = ASC(CK$): IF CK = 0 THEN BEEP: BEEP: GOTO 2400  'DISALLOW SPECIAL KEYS
  246. 2460 IF NOT NUM.ONLY% THEN GOTO 2510  'ALPHAMERIC FIELD IF NOT TRUE
  247. 2470 IF CK >= ASC("0") AND CK <= ASC("9") THEN GOTO 2510  'VALID NUMERIC
  248. 2480 IF NOT DEC.MINUS% THEN GOTO 2500
  249. 2490 IF CK$ = "." OR CK$ = "-" THEN GOTO 2510  'NUMERIC FIELD MAY HAVE DECIMAL OR MINUS
  250. 2500 SOUND 50,4: GOTO 2400   'INVALID KEY ENTRY
  251. 2510 DATA.CNT% = DATA.CNT% + 1   'INCREMENT DATA COUNT
  252. 2520 DATU$ = DATU$ + CK$: PRINT CK$;:   'APPEND ENTRY TO DATA FIELD AND PRINT
  253. 2530 IF DATA.CNT% >= FIELDMAX% THEN GOTO 2550
  254. 2540 GOTO 2400   'INPUT NEXT CHARACTER
  255. 2550 COLOR 7,0
  256. 2560 RETURN      'DATA ENTRY FIELD COMPLETED
  257. 2570 REM  --------------------------------------------------------------------------------------------------------------
  258. 2580 REM                            SUBROUTINE TO BACKSPACE AND ERASE DATA ENTRY CHARACTER
  259. 2590 REM  --------------------------------------------------------------------------------------------------------------
  260. 2600 IF DATA.CNT% = 0 THEN RETURN   'TEST IF BACKSPACE KEY IS FIRST DATA ENTRY KEY
  261. 2610 DATU$ = LEFT$(DATU$,DATA.CNT% - 1)   'DROP LAST KEYED ENTRY
  262. 2620 LOCATE Y,(X + DATA.CNT%)   'SET CURSOR TO ERASE POSITION
  263. 2630 PRINT CHR$(45);    'OVERLAY WITH DASH CHARACTER
  264. 2640 LOCATE Y,(X + DATA.CNT%)   'SET CURSOR FOR POSITION JUST ERASED
  265. 2650 DATA.CNT% = DATA.CNT% - 1  'DECREMENT COUNT
  266. 2660 RETURN
  267. 2670 REM  **************************************************************************************************************
  268. 2680 REM                                              PROGRAM END
  269. 2690 REM  **************************************************************************************************************
  270. 2700 LPRINT CHR$(18)
  271. 2710 IF FKEY <> 66 THEN COLOR 31,0: PRINT IN$;"  PAMBOOKS program cancelled":  COLOR 7,0: CLOSE:  END
  272. 2720 CLS
  273. 2730 LOCATE 12,1
  274. 2740 PRINT IN$;"  PAMBOOKS program normal End-of-Job"
  275. 2750 CLOSE:  END
  276. 2760 REM  --------------------------------------------------------------------------------------------------------------
  277. 4000 GOTO 4000  'CHAIN MERGE AREA
  278. 9000 GOTO 9000  'CHAIN MERGE AREA
  279. 9010 GOTO 9010  'STATEMENT FOLLOWING CHAIN MERGE AREA
  280. 
  281. 4000 GOTO 4000  'CHAIN MERGE AREA
  282. 9000 GOTO 9000  'CHAIN MERGE AREA
  283. 9010 GOTO 9010  'STATEMENT FOLLOWING CHAIN MERGE AREA
  284.